home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 October: Mac OS SDK / Dev.CD Oct 97 SDK1.toast / Development Kits (Disc 1) / QuickDraw 3D / RAVE SDK 1.5 MacOS / RaveDemo / MyVectorMath.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-08-14  |  1.5 KB  |  84 lines  |  [TEXT/CWIE]

  1. #include "MyHeader.h"
  2.  
  3. // = v1 * v2
  4. float MyDotProduct(MyVector * v1, MyVector * v2)
  5. {
  6.     return v1->x * v2->x + v1->y * v2->y + v1->z * v2->z;
  7. }
  8.  
  9.  
  10. // v3 = v1 - v2
  11. void MyVectorSubtract(MyVector * v1, MyVector * v2, MyVector * v3)
  12. {
  13.     v3->x = v1->x - v2->x;
  14.     v3->y = v1->y - v2->y;
  15.     v3->z = v1->z - v2->z;
  16. }
  17.  
  18. // v3 = v1 + v2
  19. void MyVectorAdd(MyVector * v1, MyVector * v2, MyVector * v3)
  20. {
  21.     v3->x = v1->x + v2->x;
  22.     v3->y = v1->y + v2->y;
  23.     v3->z = v1->z + v2->z;
  24. }
  25.  
  26. // v2 = f * v1
  27. void MyVectorMultiply(float f, MyVector * v1, MyVector * v2)
  28. {
  29.     v2->x = f * v1->x;
  30.     v2->y = f * v1->y;
  31.     v2->z = f * v1->z;
  32. }
  33.  
  34. // r is a reflection of l through n
  35. // R = 2(N * L)N - L
  36. // taken from 3D Computer Graphics by Alan Watt, p19
  37. // vectors must be normalized first, i think
  38. void MyCalculateReflection(MyVector * l, MyVector * n, MyVector * r)
  39. {
  40.     MyVector temp;
  41.     
  42.     /////
  43.     
  44.     MyVectorMultiply(MyDotProduct(l, n) * 2, n, &temp);
  45.     MyVectorSubtract(&temp, l, r);
  46. }
  47.  
  48. // v3 = v1 x v2
  49. void MyVectorCrossProduct(MyVector * v1, MyVector * v2, MyVector * v3)
  50. {
  51.     MyVector vt;
  52.     
  53.     vt.x = v1->y * v2->z - v1->z * v2->y;
  54.     vt.y = v1->z * v2->x - v1->x * v2->z;
  55.     vt.z = v1->x * v2->y - v1->y * v2->x;
  56.     
  57.     *v3 = vt;
  58. }
  59.  
  60. float MyVectorLength(MyVector * v1)
  61. {
  62.     return HYPOT3(v1->x, v1->y, v1->z);
  63. }
  64.  
  65.  
  66. float MyVectorDistance(const MyVector * v1, const MyVector * v2)
  67. {
  68.     return HYPOT3(v1->x - v2->x, v1->y - v2->y, v1->z - v2->z);
  69. }
  70.  
  71.  
  72. float MyVectorNormalize(MyVector * v1, MyVector * v2)
  73. {
  74.     float l;
  75.     
  76.     /****/
  77.     
  78.     l = MyVectorLength(v1);
  79.     v2->x = v1->x / l;
  80.     v2->y = v1->y / l;
  81.     v2->z = v1->z / l;
  82.  
  83. }
  84.